package main

import (
	"context"
	"github.com/sirupsen/logrus"
)

// IndexExists 检查是否存在 索引
func (demo DemoModel) IndexExists() bool {
	// 查索引是否存在
	exists, err := client.IndexExists(demo.Index()).Do(context.Background())
	if err != nil {
		logrus.Error(err.Error())
		return exists
	}
	return exists
}

// CreateIndex 创建索引
func (demo DemoModel) CreateIndex() error {
	if demo.IndexExists() {
		// 存在索引, 就删除索引, 进行添加
		err := demo.DeleteIndex()
		if err != nil {
			logrus.Error(err.Error())
			return err
		}
	}
	// 不存在索引, 直接进行添加
	createIndex, err := client.CreateIndex(demo.Index()).BodyString(demo.Mapping()).Do(context.Background())
	if err != nil {
		logrus.Error("创建索引失败")
		logrus.Error(err.Error())
		return err
	}
	if !createIndex.Acknowledged {
		logrus.Error("创建失败")
		return err
	}
	logrus.Infof("索引 %s 创建成功", demo.Index())
	return nil
}

// DeleteIndex 删除索引
func (demo DemoModel) DeleteIndex() error {
	deleteIndex, err := client.DeleteIndex(demo.Index()).Do(context.Background())
	if err != nil {
		logrus.Error("索引删除失败")
		logrus.Error(err.Error())
		return err
	}
	if !deleteIndex.Acknowledged {
		logrus.Error("删除失败")
		return err
	}
	return nil
}

// Mapping 索引结构
func (demo DemoModel) Mapping() string {
	return `
{
	"settings": {
		"index": {
			"max_result_window": "100000"
		}
	},
	"mappings": {
		"properties": {
			"title": {
				"type": "text"
			},
			"user_id": {
				"type": "integer"
			},
			"created_at": {
				"type": "date",
				"null_value": "null",
				"format": "[yyyy-MM-dd HH:mm:ss]"
			}
		}
	}
}
`
}
